2023/05/23 更新: 為了避免本文章散落在不同網站,之後統一由部落格更新,再麻煩從部落格查看~
本文章同時發佈於:
文章為自己的經驗與夥伴整理的內容,設計沒有標準答案,如有可以改進的地方,請告訴我,我會盡我所能的修改,謝謝大家~
大家好,今天要將 Istio 與 K8s 整合,整合之後會發現每個 K8s pod 都會從 1 個容器變為 2 個容器,
是因為容器都多了一個 envoy proxy 容器來管理流量,如圖,之後就可以再利用 envoy proxy 配合 Control Plane 來控制 Service Mesh。
官網已有相當清楚的教學,在我 Mac 上就是下載檔案並且加入執行的環境變數即可。
$ curl -L https://istio.io/downloadIstio | sh -
$ cd istio-1.7.3
$ export PATH=$PWD/bin:$PATH
我們將以此Example-Code來說明,
Istio 至少需要 K8s 1.16 以上才支持,而之前的文章是使用 K8s 1.15,所以必須先刪除 minikube 的 K8s 1.15,
$ minikube delete
創建 1.16 的 K8s,並開起 ingress
$ minikube start --driver=hyperkit --kubernetes-version v1.16.0
$ minikube addons enable ingress
取得 minikube ip,
$ minikube ip
將特定api.backend.com
與web.backend.com
轉換成 minikube ip,以確保 ingress 正常運作,輸入以下指令開啟文件並儲存,
$ open /etc/hosts
安裝 Istio 至 K8s,
$ istioctl install --set profile=demo
啟用istio-injection
,這會使在建立 pod 的時候,自動在 pod 中加入 envoy proxy 容器,
$ kubectl label namespace default istio-injection=enabled
再透過 Helm 啟動之前,因為 K8s 1.16 與 1.15 有一些breaking change,所以必須要在 deployment config 中加入 selector,如圖,
最後啟動 K8s 應用!
helm install . --generate-name
Work!而紅匡處中容器多了 envoy proxy,但綠匡處會發現一直啟動不了 envoy proxy,這導致api.backend.com
也沒辦法正常運作,
不過不用擔心,因為 Istio 本身就是設計每個容器都要有個 sidecar envoy proxy 了,實在沒必要再設計一個 envoy 的 service,我們直接使用 Istio 原生的功能來設計即可,將在之後介紹。